#ifndef _Sem_hpp_
#define _Sem_hpp_

#include <iostream>
#include <semaphore.h>
#include <pthread.h>

namespace SemModel{
    const int defaultvalue = 1;
    class Sem{
        public:
            Sem(unsigned int sem_value = defaultvalue){
                sem_init(&_sem,0,sem_value);
            }
            void P(){
                int n = sem_wait(&_sem);
                (void)n;
            }
            void V(){
                int n = sem_post(&_sem);
                (void)n;
            }
            ~Sem(){
                sem_destroy(&_sem);
            }

        private:
            sem_t _sem;
    };

}

#endif